% 求解线性方程组的最速下降法
% @author : slandarer
A = [ 3 -1  0  1 -1;
     -1  6  0  0  2;
      0  0  2  1  0;
      1  0  1  4  1;
     -1  2  0  1  5];
b = [9; 18; 1; 2; 6];
x = zeros(size(b));

epn    = inf;     % 初始精度
tol    = 1e-6;    % 要求精度
maxItr = 1e3;     % 最大轮数

k=1;
tic;
while k<=maxItr && epn>tol
    p = b-A*x;                % 求解梯度反方向
    a = dot(p,p)./dot(A*p,p); % 求解\alpha值
    x = x+a.*p;               % 更新变量x值
    
    k = k+1;
    epn = norm(a.*p);
end
toc;

disp(['共进行[',num2str(k-1),']次迭代'])
disp('最速下降法求解结果为:')
disp(x)
disp('线性方程组的解为:')
disp(A\b)
% 历时 0.000099 秒。
% 共进行[46]次迭代
% 最速下降法求解结果为:
%     4.9367
%     3.4709
%     1.1418
%    -1.2835
%     1.0557
% 线性方程组的解为:
%     4.9367
%     3.4709
%     1.1418
%    -1.2835
%     1.0557